#ifndef _MY_SV_IPC_H
#define _MY_SV_IPC_H

#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <sys/shm.h>

union semun
{
    int val;              // 仅用于SETVAL命令
    struct semid_ds *buf; // 用于IPC_SET等命令
    ushort *array;        // 用于SETALL等命令
};

int new_sem(char *path, int id, int sem_num, int val);

void sem_wait(int sem_id, int sem_NO);

void sem_signal(int sem_id, int sem_NO);

void clear_sem(int sem_id);

int new_shm(char *path, int id, size_t shmsize);

void *my_shmat(int shmid);

void my_shmdt(const void *addr);

void clear_shm(int shmid);

#endif
